home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 April: Mac OS SDK / Dev.CD Apr 96 SDK / Dev.CD Apr 96 SDK1.toast / Development Kits (Disc 1) / OpenDoc Development Framework / ODFDev / ODF / Framewrk / FWGadgts / Sources / FWGadget.cpp < prev    next >
Encoding:
Text File  |  1995-11-08  |  5.8 KB  |  228 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWGadget.cpp
  4. //    Release Version:    $ 1.0d11 $
  5. //
  6. //    Copyright:    © 1995 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #include "FWFrameW.hpp"
  11.  
  12. #ifndef FWGADGET_H
  13. #include "FWGadget.h"
  14. #endif
  15.  
  16. #ifndef FWFRAME_H
  17. #include "FWFrame.h"
  18. #endif
  19.  
  20. #ifndef FWUTIL_H
  21. #include "FWUtil.h"
  22. #endif
  23.  
  24. // ----- OS Layer -----
  25.  
  26. #ifndef FWEVENT_H
  27. #include "FWEvent.h"
  28. #endif
  29.  
  30. #ifndef FWGRGLOB_H
  31. #include "FWGrGlob.h"
  32. #endif
  33.  
  34. #ifndef FWGRUTIL_H
  35. #include "FWGrUtil.h"
  36. #endif
  37.  
  38. #ifndef FWODGEOM_H
  39. #include "FWODGeom.h"
  40. #endif
  41.  
  42. #ifndef FWFCTINF_H
  43. #include "FWFctInf.h"
  44. #endif
  45.  
  46. #ifndef FWWINDOW_H
  47. #include "FWWindow.h"
  48. #endif
  49.  
  50. // ----- OpenDoc Includes -----
  51.  
  52. #ifndef SOM_ODFacet_xh
  53. #include <Facet.xh>
  54. #endif
  55.  
  56. #ifndef SOM_ODCanvas_xh
  57. #include <Canvas.xh>
  58. #endif
  59.  
  60. #ifndef SOM_ODTransform_xh
  61. #include <Trnsform.xh>
  62. #endif
  63.  
  64. //========================================================================================
  65. // Runtime Informations
  66. //========================================================================================
  67.  
  68. #if FW_LIB_EXPORT_PRAGMAS
  69. #pragma lib_export on
  70. #endif
  71.  
  72. #ifdef FW_BUILD_MAC
  73. #pragma segment fwgadgts
  74. #endif
  75.  
  76. //========================================================================================
  77. // Forward declarations
  78. //========================================================================================
  79.  
  80. class FW_CLASS_ATTR ODTransform;
  81.  
  82. //========================================================================================
  83. // CLASS FW_CGadget
  84. //========================================================================================
  85.  
  86. FW_DEFINE_CLASS_M1(FW_CGadget, FW_CView)
  87.  
  88. //----------------------------------------------------------------------------------------
  89. // FW_CGadget::FW_CGadget
  90. //----------------------------------------------------------------------------------------
  91.  
  92. FW_CGadget::FW_CGadget(Environment* ev, 
  93.                    FW_CView* container, ODID id,
  94.                    const FW_CRect& bounds,
  95.                    int contentSpace) :
  96.     FW_CView(ev, container, id, TRUE, kNoPriority, bounds, FW_kZeroPoint, NULL, contentSpace)
  97. {
  98.     FW_ASSERT(container != NULL);
  99. //    initializer.AddGadget(this);  *LSD  use CViewInitializer?
  100. }
  101.  
  102. //----------------------------------------------------------------------------------------
  103. // FW_CGadget::FW_CGadget
  104. //----------------------------------------------------------------------------------------
  105.  
  106. FW_CGadget::FW_CGadget(Environment* ev, FW_CReadableStream& archive) :
  107.     FW_CView(ev)
  108. {
  109. //    initializer.AddGadget(this);
  110.     
  111. #if 0    // *LSD to see later
  112.     // Read gadget container fields
  113.     FW_CView* container;
  114.     FW_READ_DYNAMIC_OBJECT(archive, &gadget, FW_CGadget);
  115.     
  116.     // Read event handler fields
  117.     FW_MEventHandler::EventIdentifier id;
  118.     archive >> id;
  119.     SetIdentifier(ev, id);
  120.     
  121.     unsigned long gadgetCnt;
  122.     
  123.     // Need to read subgadgets here because subgadget will call by AdoptGadget method which is
  124.     // a virtual method that needs to be dispatched correctly.
  125.     
  126.     archive >> gadgetCnt;
  127.     while (gadgetCnt--)
  128.     {
  129.         FW_CGadget* gadget;
  130.         FW_READ_DYNAMIC_OBJECT(archive, &gadget, FW_CGadget);
  131.     }
  132.  
  133.     archive >> fLocation;
  134.     archive >> fSize;
  135. #endif
  136. }
  137.  
  138. //----------------------------------------------------------------------------------------
  139. // FW_CGadget::~FW_CGadget
  140. //----------------------------------------------------------------------------------------
  141.  
  142. FW_CGadget::~FW_CGadget()
  143. {
  144. }
  145.  
  146. //----------------------------------------------------------------------------------------
  147. //    FW_CGadget::Write
  148. //----------------------------------------------------------------------------------------
  149.  
  150. void FW_CGadget::Write(FW_CWritableStream& archive, const void* gadget)
  151. {
  152.     ((FW_CGadget *) gadget)->Flatten(archive);
  153. }
  154.  
  155. //----------------------------------------------------------------------------------------
  156. //    FW_CGadget::Flatten
  157. //----------------------------------------------------------------------------------------
  158.  
  159. void FW_CGadget::Flatten(FW_CWritableStream& archive) const
  160. {
  161. #if 0
  162.     Environment* ev = ::somGetGlobalEnvironment();
  163.     
  164.     archive << fLocation;
  165.     archive << fSize;
  166.  
  167.     archive << CountGadgets(ev);
  168.     
  169.     FW_CGadgetIterator iter(ev, this);
  170.     for (FW_CGadget* gadget = (FW_CGadget*)iter.First(ev);
  171.             iter.IsNotComplete(ev); gadget = (FW_CGadget*)iter.Next(ev))
  172.     {
  173.         FW_WRITE_DYNAMIC_OBJECT(archive, &gadget, FW_CGadget);
  174.     }
  175. #endif
  176. }
  177.  
  178.  
  179. //========================================================================================
  180. // CLASS FW_CGadgetInitializer
  181. //========================================================================================
  182. // *LSD  not used anymore (for now)
  183. #if 0
  184.  
  185. //----------------------------------------------------------------------------------------
  186. // FW_CGadgetInitializer::FW_CGadgetInitializer
  187. //----------------------------------------------------------------------------------------
  188.  
  189. FW_CGadgetInitializer* FW_CGadgetInitializer::fInitializerStack;
  190.  
  191. FW_CGadgetInitializer::FW_CGadgetInitializer(Environment* ev) :
  192.     fGadgetsToInitialize(new FW_CPrivOrderedCollection),
  193.     fNextInitializer(fInitializerStack)
  194. {
  195.     fInitializerStack = this;
  196. }
  197.  
  198. FW_CGadgetInitializer::~FW_CGadgetInitializer()
  199. {
  200.     Environment* ev = ::somGetGlobalEnvironment();
  201.     
  202.     FW_COrderedCollectionIterator ite(fGadgetsToInitialize);
  203.     for (FW_CGadget* gadget = (FW_CGadget *) ite.First();
  204.             ite.IsNotComplete();
  205.             gadget = (FW_CGadget *) ite.Next())
  206.     {
  207.         gadget->PostCreate(ev);
  208.     }
  209.     
  210.     delete fGadgetsToInitialize;
  211.     
  212.     fInitializerStack = fInitializerStack->fNextInitializer;
  213. }
  214.  
  215. void FW_CGadgetInitializer::AddGadget(FW_CGadget* gadgetToInitialize)
  216. {
  217.     fGadgetsToInitialize->AddLast(gadgetToInitialize);
  218. }
  219.  
  220. FW_CGadgetInitializer& FW_CGadgetInitializer::GetGadgetInitializer()
  221. {
  222.     FW_ASSERT(fInitializerStack != NULL);
  223.     
  224.     return *fInitializerStack;
  225. }
  226.  
  227. #endif  // CLASS FW_CGadgetInitializer
  228.